(function () {
  // 定义一个Animal类
  class Animal {
    name: string;
    age: number;

    constructor(name: string, age: number) {
      this.name = name;
      this.age = age;
    }

    sayHello() {
      console.log("动物在叫~");
    }
  }

  /**
   * Dog继承Animal
   *  - 使用继承后，子类将会拥有父类中所有的方法和属性
   *  - 通过继承可以将多个类中共有的代码写在一个父类中
   *        这样只需要写一次即可让所有的子类同时拥有父类的属性和方法
   *        如果希望在子类中添加一些父类中没有的属性和方法直接添加就行
   *  - 如果在子类中添加了和父类相同的方法，则子类方法会覆盖掉父类中的方法
   */
  class Dog extends Animal {
    sayHello(): void {
      console.log("汪汪汪");
    }
  }

  class Cat extends Animal {
    sayHello(): void {
      console.log("喵喵喵");
    }
  }

  const dog = new Dog("旺财", 5);
  dog.sayHello();

  const cat = new Cat("喵喵", 4);
  cat.sayHello();
})();
